/*
 * 
 */
package pluginTable;

import application.ViewManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;

/**
 *cette classe permet la gestion du menu fichier
 * ajouter une nouvelle feuille, serialiser en cas de fermeture avec sauvegarde
 * 
 * @author mazid
 */
public class MenuFichier implements ActionListener, Serializable{
    private static final long serialVersionUID = 07347052532L;
    public JMenu addMenuFichier(){
        JMenu menuFonction = new JMenu();
        JMenuItem item = new JMenuItem("Nouveau",'N');
        item.setActionCommand("nouveau");
        item.setToolTipText("Ajoute une nouvelle feuille de calcule vide");
        item.addActionListener(this);
        menuFonction.add(item);
        item = new JMenuItem("Ouvrir",'O');
        item.setActionCommand("ouvrir");
        item.setToolTipText("Ouvrir une feuille enregister");
        item.addActionListener(this);
        menuFonction.add(item);
        item = new JMenuItem("Enregistrer",'A');
        item.setActionCommand("enregistrer");
        item.setToolTipText("Enregistre la feuille deja nommée");
        item.addActionListener(this);
        menuFonction.add(item);
        item = new JMenuItem("Enregistrer Sous",'A');
        item.setActionCommand("enregistrersous");
        item.setToolTipText("Enregistre la feuille pour la première fois");
        item.addActionListener(this);
        menuFonction.add(item);
        item = new JMenuItem("Quitter",'Q');
        item.setActionCommand("quitter");
        item.setToolTipText("Quitte l'application avec un message de confirmation");
        item.addActionListener(this);
        menuFonction.add(item);
        return menuFonction;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("nouveau")){
            ViewManager.getInstance().displayTable(new Table(new ModelTable()));
            
        }
        if(e.getActionCommand().equals("ouvrir")){
            
        }
        if(e.getActionCommand().equals("enregister")){
            
        }
        if(e.getActionCommand().equals("enregistrer")){
            
        }
        if(e.getActionCommand().equals("enregistrersous")){
            
        }
        if(e.getActionCommand().equals("quitter")){
            quitter();
            
        }
    }   
    
    // quitter l'application en fonction du bouton qu'il a choisi
    private void quitter() {
        int rep = JOptionPane.showConfirmDialog(null,
                    "Voulez vous enregistrer l'état de l'application avant de quitter",
                    "Fermeture de l'application",JOptionPane.YES_NO_CANCEL_OPTION);
            switch(rep){
                // si oui
                case 0:
                    serialiser();
                    ViewManager.getInstance().exit();
                    System.out.println(" serialiser ma belle");
                    break;
                // si non
                case 1:
                    ViewManager.getInstance().exit();
                // si annuler
                   
            }

    }
    public void serialiser(){
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        JTabbedPane pane = ViewManager.getInstance().getJTabbedPane();
        int tabCount = pane.getTabCount();
        System.out.println("teste bienF");
        try {
            fos= new FileOutputStream("save.txt");
            oos = new ObjectOutputStream(fos);
            oos.writeInt(tabCount);
            for(int i=0; i<tabCount; i++){
                JScrollPane scroll = (JScrollPane)pane.getComponentAt(i);
                Table table = (Table)scroll.getViewport().getView();
                table.clearSelection();
                table.editingCanceled(null);
                table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
                ModelTable model = (ModelTable)table.getModel();
                oos.writeObject(model);
                
            }
            System.out.println("nbtab "+tabCount);
            oos.flush();
            oos.close();
        } catch (IOException ex) {
            ex.printStackTrace(System.err);
        
        } finally {
            try {
                oos.close();
                fos.close();
            } catch (IOException ex) {
                ex.printStackTrace(System.err);
                
            }
        }
    }
}
